Universo Online
Web Sites Pessoais

Macro com Parâmetro

Anterior Próximo Índice
;;MACROS02.ASM
;;Demonstração de uso de MACROS com NASM
;;Macros com parâmetros e macros sem parâmetros
;;Macros que usam parâmetros devem
;;indicar o número de parâmetros
;;explicitamente, e cada parâmetro é referido dentro da macro
;;dessa forma:
;;             %1 = primeiro parâmetro,
;;             %2 = segundo parâmetro,
;;             %3 = terceiro parâmetro e assim por diante.
;;Uma macro sem parâmetros deve usar parâmetro 0.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

       %macro pushx 0       ;salva regs AX,BX,CX e DX...
          push dx           ;na pilha (SS:SP)
          push cx
          push bx
          push ax
       %endmacro

       %macro popx 0         ;recupera regs AX, BX, CX e DX...
          pop ax             ;da pilha (SS:SP)
          pop bx
          pop cx
          pop dx
       %endmacro



      %macro PosicionaCursor 2  ;usa dois parâmetros
          pushx                 ;salva regs usados 
          mov ah,2
          mov dl,%1             ;coluna
          mov dh,%2             ;linha
          mov bh,0              ;página de v¡deo
          int 0x10              ;chama interrupção do BIOS
          popx                  ;recupera regs usados
      %endmacro


      %macro LimpaTela 1
         pushx
         xor ax,ax               ;faz ah=0 e al =0
         mov ah,6                ;função do BIOS: rolar tela
         xor cx,cx               ;ch=0,cl=0, canto esquerdo superior
         mov dh,24               ;25 linhas (de 0 a 24)
         mov dl,79               ;80 colunas (de 0 a 79)
         mov bh,%1               ;atributo (cor)
         int 0x10                ;chama interrupção do BIOS
         popx
       %endmacro

     
      %macro ExibeMensagem 1
         pushx
         mov dx, %1
         mov ah,9
         int 0x21
         popx
      %endmacro

 ;;------- In¡cio do Programa --------------


      org 0x100
      LimpaTela 0x07                ;0x07: atributo normal
      PosicionaCursor 0,12          ;Cursor: coluna 0,linha 12
      ExibeMensagem Mensagem        ;Exibe a mensagem

      int 0x20                      ;Termina programa .COM
      ;;;;;;;;;;;;;;;;;;
      ;dados do programa
      ;;;;;;;;;;;;;;;;;;

      Mensagem db 10,13,"Esta mensagem também será exibida por uma MACRO"
               db 10,13,"$"



Anterior Próximo Índice